package com.empire.module.member.service.presentation;

import com.baomidou.mybatisplus.extension.service.IService;
import com.empire.module.member.controller.admin.presentation.vo.PresentationPageReqVO;
import com.empire.module.member.controller.admin.presentation.vo.PresentationSaveReqVO;
import com.empire.module.member.dal.dataobject.presentation.PresentationDO;
import com.empire.framework.common.pojo.PageResult;

import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.File;
import java.io.IOException;
import java.util.List;

/**
 * 报告 Service 接口
 *
 * @author 主席大人
 */
public interface PresentationService extends IService<PresentationDO> {

    /**
     * 创建报告
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createPresentation(@Valid PresentationSaveReqVO createReqVO);

    /**
     * 更新报告
     *
     * @param updateReqVO 更新信息
     */
    void updatePresentation(@Valid PresentationSaveReqVO updateReqVO);

    /**
     * 删除报告
     *
     * @param id 编号
     */
    void deletePresentation(Long id);

    /**
     * 获得报告
     *
     * @param id 编号
     * @return 报告
     */
    PresentationDO getPresentation(Long id);

    /**
     * 获得报告分页
     *
     * @param pageReqVO 分页查询
     * @return 报告分页
     */
    PageResult<PresentationDO> getPresentationPage(PresentationPageReqVO pageReqVO);

    /**
     * 我的所有报告
     * @return 报告列表
     */
    List<PresentationDO> getPresentationList();

    /**
     * 转换并保存HTML为Word文件
     *
     * @param id       报告ID
     * @param htmlFile HTML文件
     * @return 是否成功
     */
    boolean mergeBinaryData(Long id, File htmlFile);

    /**
     * 下载报告文件
     *
     * @param response 响应对象
     * @param id       报告ID
     * @throws IOException  IO异常
     */
    void downloadFile(HttpServletResponse response, Long id) throws IOException;

}
